The present invention relates to managing information technology (IT) and communication systems, and more particularly to constructing and optimizing deployment patterns.
Deployment patterns are metadata descriptions of IT and communications systems. Deployment patterns are used as instructions by cloud orchestration tools to automate the accurate construction of virtual IT and communications systems including compute, network, and storage systems. To construct a deployment pattern of good quality, a human pattern developer requires significant knowledge of (1) multiple classes of components in the system, including networks, security, directories, storage, applications, databases, and application servers; (2) the relationships among the aforementioned components; and (3) non-functional requirements (NFRs) and target service levels (e.g., target levels for availability and fluctuations in transaction throughput over time) and how to design infrastructure to achieve the NFRs and the target service levels. NFRs are requirements associated with characteristics of the system, including the security, availability, response time, throughput, and latency).
The known approaches to building deployment patterns have the following issues. Few people or teams have the skills to produce a deployment pattern of good quality. Issues with deployment patterns are identified when the system based on the pattern fails during a test phase or in production. A pattern developer can review documentation on precedent implementations to guide the deployment pattern design, but there is no guarantee that the documentation is accurate. Collecting data including metadata descriptions of the components in a system, relationships between the components, performance characteristics of the components, and service level achievement over time is labor-intensive. Because of the aforementioned issues, pattern developers manually build deployment patterns based on incomplete and possibly inaccurate information. A pattern developer can easily overlook key information such as performance data in log files that indicate issues with an existing system. The pattern developer may be replicating a bad design or copying a system that has failed to meet its target service levels.
Another issue with the known approaches to building deployment patterns includes a lack of an automated means of validating that a deployment pattern will meet desired service levels. For example, the pattern developer does not have an automated means to ensure that the deployment pattern will yield a system that has 99.99% availability or 500 millisecond latency. Many production systems achieve service levels by having excess infrastructure, such as more compute capacity or higher bandwidth network connections that is needed. This excess infrastructure means that ongoing infrastructure costs are higher than they need to be. For example, the pattern developer does not have an automated means for determining whether production resources are being used effectively and efficiently.
Yet another issue with the known approaches to building deployment patterns includes the need for a human to manually adjust the deployment pattern in response to the system being modified to meet a different target service level. For example, a deployment pattern that establishes a customer premise environment comprising security, teller machines, and voice services will need less network and compute capacity for a small rural office and greater capacity at a regional center. The pattern developer must manually adjust each deployment pattern to suit the different offices. The required manual adjustment takes a significant amount of labor and is error-prone.
Accordingly, there is a need for a technique that automatically constructs and enhances a deployment pattern at a design phase that precedes any test or production phase, where the deployment pattern is based on complete and accurate information from existing systems, where the information specifies the components in the existing systems, interrelationships between the components, performance characteristics of the components, and service level achievement in the existing systems over time.